/**
 * 
 */
package com.autonavi.commons.dbhelper.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

/**
 * @author jintao.yu
 * @date 2014年1月13日 下午5:08:30
 * @package com.autonavi.commons.dbhelper.utils
 * @className MapWithIgnoreCaseKey
 * @Description TODO
 */
public class CaseInsensitiveHashMap0<K,V> extends HashMap<K, V>{

	/**
	 * @author jintao.yu
	 * @date 2014年1月13日 下午5:08:30 
	 * @Description TODO
	 */
	public CaseInsensitiveHashMap0() {
		// TODO Auto-generated constructor stub
		super();
	}
	
	public CaseInsensitiveHashMap0(int arg0){
		super(arg0);
	}
	
	/** 
	 * @author jintao.yu
	 * @date 2014年1月13日 下午5:11:01
	 * @see java.util.HashMap#containsKey(java.lang.Object)
	 * @Description TODO
	 * @param key
	 * @return 
	 */
	@Override
	public boolean containsKey(Object key) {
		// TODO Auto-generated method stub
		if(key instanceof String){
			key=((String) key).toLowerCase(Locale.ENGLISH);
		}
		return super.containsKey(key);
	}
	/** 
	 * @author jintao.yu
	 * @date 2014年1月13日 下午5:15:16
	 * @see java.util.HashMap#put(java.lang.Object, java.lang.Object)
	 * @Description TODO
	 * @param key
	 * @param value
	 * @return 
	 */
	@SuppressWarnings("unchecked")
	@Override
	public V put(K key, V value) {
		// TODO Auto-generated method stub
		if (key instanceof String) {
			key= (K) ((String) key).toLowerCase(Locale.ENGLISH);
		}
		return super.put(key, value);
	}
	/** 
	 * @author jintao.yu
	 * @date 2014年1月13日 下午5:18:26
	 * @see java.util.HashMap#get(java.lang.Object)
	 * @Description TODO
	 * @param key
	 * @return 
	 */
	@Override
	public V get(Object key) {
		// TODO Auto-generated method stub
		if(key instanceof String){
			key=((String) key).toLowerCase(Locale.ENGLISH);
		}
		return super.get(key);
	}
	
	/** 
	 * @author jintao.yu
	 * @date 2014年1月13日 下午5:46:15
	 * @see java.util.HashMap#putAll(java.util.Map)
	 * @Description TODO
	 * @param m 
	 */
	@Override
	public void putAll(Map<? extends K, ? extends V> m) {
		// TODO Auto-generated method stub
		int mapSize=m.size();
		if(mapSize==0){
			return;
		}
		Set<? extends K> set=m.keySet();
		Iterator<? extends K> iterator=set.iterator();
		while(iterator.hasNext()){
			K key=iterator.next();
		//为什么下面的会出现编译错误呢？
		//	V value=m.get(key);
		//	m.put(key, value);
			put(key, m.get(key));
		}
		super.putAll(m);
	}
	
	/** 
	 * @author jintao.yu
	 * @date 2014年1月13日 下午5:46:39
	 * @see java.util.HashMap#remove(java.lang.Object)
	 * @Description TODO
	 * @param key
	 * @return 
	 */
	@Override
	public V remove(Object key) {
		// TODO Auto-generated method stub
		if(key instanceof String){
			key=((String) key).toLowerCase(Locale.ENGLISH);
		}
		return super.remove(key);
	}
}
